clojure.core のセットに関する var
Clojure におけるセットは、clojure.lang.IPersistentSet インタフェースを実装したインスタンス
関数
set: 引数のコレクション(シーケンスやマップ、文字列など)をセットに変換する
code:clj
(set '(1 2 2 3 3)) ; #{1 3 2} (set "hello") ; #{\e \h \l \o} set?: 引数が IPersistentSet インタフェースを実装しているか
code:clj
(map set? [ #{} {}]) ; (false false true false) hash-set: 与えられたキーを持つ新しいハッシュセットを返す
code:clj
(hash-set 1 2 3) ; #{1 3 2} ハッシュセットでは、重複するキーは自動的に除外される
code:clj
引数を渡さない場合、空のハッシュセットを返す
code:clj
set と同様、PersistentHashSet インスタンスを返す
code:clj
(map type [(set 1) (hash-set 1)]) ;; (clojure.lang.PersistentHashSet clojure.lang.PersistentHashSet)
sorted-set: 重複するキーを持つ引数から、ソートされたセット(PersistentTreeSet)を作成する
code:clj
(sorted-set 1 3 2 1) ; #{1 2 3} (sorted-set "b" "a" "c" "a") ; #{"a" "b" "c"} (type (sorted-set 1)) ; clojure.lang.PersistentTreeSet
sorted-set-by: 比較関数 を指定して新しいソートされたセットを作成する 比較関数は 2 つの引数を受け取り、負の値を返せば左の引数が、正の値を返せば右の引数が小さいことを意味する
e.g.
code:clj
code:clj
(sorted-set-by > 3 1 4 1 5 9 2 6 5) ; #{9 6 5 4 3 2 1} (sorted-set-by #(compare %2 %1) 3 1 4 1 5 9 2 6 5) ; #{9 6 5 4 3 2 1} (sorted-set-by #(compare (count %2) (count %1)) "hello" "world" "clojure" "java") disj: 指定された要素を除外した新しいセットを返す
code:clj
除外するデータが見つからなくてもエラーにならない
code:clj